import { axios } from '@/utils/request'
// todo: 请求时实现loading import NuxtLoading from './components/nuxt-loading.vue'
export function fetchList (funcs, isList) {
  funcs = funcs || {}
  console.log('this.listQuery', this.listQuery)
  this.listLoading = true
  let returnData = null
  axios.post(this.url, this.listQuery).then(response => {
    /** todo: 处理code不同值的情况 0 是成功 其他情况提示**/
    if (response.code === '000000') {
      if (funcs.success) {
        console.log('this.listQuery', response)
        this.list = funcs.success(isList ? response.data : response.data.records)
      } else {
        this.list = isList ? response.data : response.data.records
      }

      this.list.forEach((i, k) => Object.assign(i, { index: k + 1 }))
      this.total = response.data.total
      this.listLoading = false
    }
    returnData = response.data
    console.log('response.data', response.data)
  }).catch(response => {
    /** 处理后台返回失败的情况**/
    this.list = []
    this.total = 0
    this.listLoading = false
    console.log('后台报错', response)
  })
  return returnData
}
// 参数 this：this formStr:form表单数据字符串，reqFunc提交的函数
export function saveQuit (formStr, reqFunc, dataHandle) {
  // 表单检验
  this[formStr].validateFields((err, values) => {
    if (!err) {
      const text = this.submitButton.text
      values = dataHandle && dataHandle(values) || values
      this.$ajaxSend(reqFunc, values, {
        before: () => {
          this.submitButton.status = true
          this.submitButton.text = text + '中'
          return true
        },
        after: () => {
          this.submitButton.status = false
          this.submitButton.text = text
          if (this.refreshDataList) {
            this.refreshDataList()
          } else {
            this.$emit('refreshDataList')
          }

          return true
        },
        fail: () => {
          this.submitButton.status = false
          this.submitButton.text = text
          return true
        }
      })
    }
  })
}
// 参数 this：this formStr:form表单数据字符串，reqFunc提交的函数
export function handleBtnClick (reqFunc, data, confirmType, btnFuncs) {
  const that = this
  btnFuncs = btnFuncs || {}
  const confirmText = {
    删除: '此操作将永久删除该数据, 是否继续?'
  }
  const funcs = {
    success: () => {
      if (!btnFuncs.success || btnFuncs.success && btnFuncs.success(data)) {
        this.getList()
        return true
      }
    }
  }
  if (!confirmType) {
    this.$ajaxSend(reqFunc, data, funcs)
  } else {
    this.$confirm({
      title: '提示',
      content: confirmText[confirmType] || confirmType,
      onOk: () => {
        that.$ajaxSend(reqFunc, data, funcs)
      }
    })
  }
}
// 参数 this：this  data：提交的数据  reqFunc： 提交的函数  funcs： 其他函数（非必填）
export function ajaxSend (reqFunc, data, funcs) {
  funcs = funcs || {}
  let loadingInstance
  // 没有before函数定义或者before执行后返回true，仍然执行默认按钮显示切换
  if (!funcs.before || funcs.before && funcs.before()) {
    // todo: 请求时实现loading
    // loadingInstance = Loading.service({ f  ullscreen: true })
  }
  console.log('提交地址+数据', reqFunc, data)
  reqFunc(data).then(({ code, mesg, data }) => {
    console.log('返回', code, mesg, data)
    this.$nextTick(() => {
      loadingInstance && loadingInstance.close()
    })
    if (code === '000000') {
      // 没有success函数定义或者success执行后返回true，仍然执行默认成功提示
      if (!funcs.success || funcs.success && funcs.success(data)) {
        this.$message.success(mesg, 1, () => {
          // 没有after函数定义或者after执行后返回true，仍然执行默认自动回调保存成功方法
          if (!funcs.after || funcs.after && funcs.after()) {
            // 默认不做处理
          }
        })
      }
    } else {
      // 没有fail函数定义或者fail执行后返回true，仍然执行默认按钮显示切换
      if (!funcs.fail || funcs.fail && funcs.fail()) {
        this.$message.error(mesg + (data || ''))
      }
    }
  }).catch(e => {
    this.$nextTick(() => {
      loadingInstance && loadingInstance.close()
    })
    if (!funcs.fail || funcs.fail && funcs.fail()) {
      this.$message.error('系统内部错误' + e)
      console.log('fail 预留', e)
    }
  })
}
export function initForm (form, datas, dateKey) {
  dateKey = dateKey || {}
  console.log('initForm:dateKey', datas)
  const formData = form.getFieldsValue()
  for (const key in formData) {
    if (datas[key] !== null && typeof datas[key] !== 'undefined') {
      if (dateKey[key]) {
        formData[key] = dateKey[key](datas[key])
      } else {
        formData[key] = datas[key]
      }
    }
  }
  console.log('initForm:formData', formData)
  form.setFieldsValue(formData)
}
